package com.anolesoft.yr.mbus.code.service.impl;

import com.anolesoft.yr.mbus.code.dto.CodeItemRelDTO;
import com.anolesoft.yr.mbus.code.entity.CodeItemRelDO;
import com.anolesoft.yr.mbus.code.mapper.CodeItemRelMapper;
import com.anolesoft.yr.mbus.code.service.CodeItemRelService;
import com.anolesoft.yr.util.CustomBeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @author zhj
 * @date 2020/9/22 19:06
 */
@Service
public class CodeItemRelServiceImpl implements CodeItemRelService {
    @Autowired
    private CodeItemRelMapper codeItemRelMapper;


    @Transactional
    @Override
    public int create(CodeItemRelDTO codeItemRelDTO) {
        return codeItemRelMapper.insert(CodeItemRelDO.builder()
                .remark(codeItemRelDTO.getRemark())
                .orderNum(codeItemRelDTO.getOrderNum())
                .objuid(codeItemRelDTO.getObjuid())
                .modifyTime(codeItemRelDTO.getModifyTime())
                .modifyUserUid(codeItemRelDTO.getModifyUserUid())
                .factoryCode(codeItemRelDTO.getFactoryCode())
                .deleteFlag(codeItemRelDTO.getDeleteFlag())
                .createUserUid(codeItemRelDTO.getCreateUserUid())
                .createTime(codeItemRelDTO.getCreateTime())
                .codeMainUid(codeItemRelDTO.getCodeMainUid())
                .codeItemUid(codeItemRelDTO.getCodeItemUid())
                .build());
    }

    @Transactional
    @Override
    public int modify(CodeItemRelDTO codeItemRelDTO) {
        return codeItemRelMapper.update(CodeItemRelDO.builder()
                .remark(codeItemRelDTO.getRemark())
                .orderNum(codeItemRelDTO.getOrderNum())
                .objuid(codeItemRelDTO.getObjuid())
                .modifyTime(codeItemRelDTO.getModifyTime())
                .modifyUserUid(codeItemRelDTO.getModifyUserUid())
                .factoryCode(codeItemRelDTO.getFactoryCode())
                .deleteFlag(codeItemRelDTO.getDeleteFlag())
                .createUserUid(codeItemRelDTO.getCreateUserUid())
                .createTime(codeItemRelDTO.getCreateTime())
                .codeMainUid(codeItemRelDTO.getCodeMainUid())
                .codeItemUid(codeItemRelDTO.getCodeItemUid())
                .build());
    }

    @Transactional
    @Override
    public int remove(String id) {
        return codeItemRelMapper.delete(id);
    }

    @Transactional
    @Override
    public int removeBatch(List<String> ids) {
        int res = 0;
        for (String id : ids) {
            res += codeItemRelMapper.delete(id);
        }
        return res;
    }

    @Transactional
    @Override
    public List<CodeItemRelDTO> selectAll() {
        return codeItemRelMapper.selectAll().stream().map(CustomBeanUtils::codeItemRelDO2DTO).collect(Collectors.toList());
    }

    @Override
    public Optional<CodeItemRelDTO> selectOneById(String id) {
        CodeItemRelDO codeItemRelDO = codeItemRelMapper.selectOneById(id);
        if (codeItemRelDO != null) {
            return Optional.of(CustomBeanUtils.codeItemRelDO2DTO(codeItemRelDO));
        }
        return Optional.empty();
    }

    @Override
    public List<CodeItemRelDTO> selectListByCodeMainUid(String codeMainUid) {
        return codeItemRelMapper.selectListByCodeMainUid(codeMainUid).stream().map(CustomBeanUtils::codeItemRelDO2DTO).collect(Collectors.toList());
    }
}
